function formatarNumero(Componente,charDecimal,charMilhar,nrCasasDecimais,simbolo,MaxValor,posicaoDoSimbolo,stNegativo) {
    if(Componente.value == "") return ;
    var stString = new String( Componente.value );
    var stResultado = "";
    if(MaxValor != "") {
        if(parseFloat(DesformataNumero(stString,simbolo,charDecimal,charMilhar)) > parseFloat(MaxValor)) {
            MaxValor = MaxValor.replace('.',charDecimal);
            MaxValor = FormataNumero(MaxValor,charDecimal,charMilhar,nrCasasDecimais,simbolo,posicaoDoSimbolo);
            alert(K_MAX_VALOR_ACEITAVEL + MaxValor);
            stResultado = MaxValor;
            Componente.focus();
        } else {
            stResultado = FormataNumero(stString,charDecimal,charMilhar,nrCasasDecimais,simbolo,posicaoDoSimbolo,stNegativo);
        }
    }
    Componente.value = stResultado;
}
/*  Esta função retorna o valor de uma string para o formato de Numero
    Parametros necessarios :
    *   String          =>  String para formatacao
    *   charDecimal     =>  Character separador decimal
    *   charMilhar      =>  Character separador de milhar
    *   nrCasasDecimais=>   Numero de casas decimais
    *   simbolo         =>  simbolo da unidade de medida
    *   posicaoDoSimbolo    => Posicao do simbolo numerico 'E' esquerda ou 'D' direita
    sintaxe ==>> FormataNumero(String,charDecimal,charMilhar,nrCasasDecimais,simbolo);*/
function FormataNumero(stValor,charDecimal,charMilhar,nrCasasDecimais,simbolo,posicaoDoSimbolo,stNegativo){
	stNegativo = stNegativo || '-';
	posicaoDoSimbolo = posicaoDoSimbolo || 'E';
    var STR = new String(stValor);
    var PosicaoDecimal = AchaCharacter(STR,charDecimal,"esquerda");
    var ParteInteira = "";
    var ParteDecimal = "";
    var Resultado = "";
    var negativo = false;

    if(PosicaoDecimal == 0){
        ParteInteira = LimpaNumero(STR,"Inteiro");
        ParteInteira = SeparaEmMilhar(ParteInteira,charMilhar);
        ParteDecimal = FixaTamanho(ParteDecimal,nrCasasDecimais);
    }
    else{
        ParteInteira = STR.substr(0,AchaCharacter(STR,charDecimal,"esquerda") - 1);
        ParteInteira = SeparaEmMilhar(ParteInteira,charMilhar);
        ParteDecimal = STR.substr(AchaCharacter(STR,charDecimal,"esquerda") ,STR.length);
        ParteDecimal = FixaTamanho(ParteDecimal,nrCasasDecimais);
    }
    if(nrCasasDecimais == 0){charDecimal = '';}
    if(posicaoDoSimbolo == 'E' || posicaoDoSimbolo == 'esquerda'){
        Resultado = simbolo + ParteInteira + charDecimal + ParteDecimal;
    }else{
        Resultado = ParteInteira + charDecimal + ParteDecimal + simbolo ;
    }
    if(negativo){
        if(stNegativo == '-'){
            Resultado = '-' + Resultado;
        }else{
            Resultado = '(' + Resultado + ')';
        }
    }
    return Resultado;
}
function desformatarNumero(Componente,stUnMedida,charDecimal,charMilhar){
    var stFormatada = Componente.value;
    var STRfinal;
    var negativo = false;

    if ((stFormatada.charAt(0) == '-')||(stFormatada.charAt(0) == '(')){ negativo = true; }
    STRfinal = stFormatada.replace('(',''); 	// Retirando simbolo
    STRfinal = STRfinal.replace(')','');    	// Retirando simbolo
    STRfinal = STRfinal.replace('-','');    	// Retirando simbolo
    STRfinal = STRfinal.replace(stUnMedida,''); // Retirando simbolo
    STRfinal = STRfinal.replace(charMilhar,''); // Retirando Separador de Milhar
    if(negativo){
        STRfinal = '-' + STRfinal;
    }
    Componente.value = STRfinal;
}
/*  Esta função retira a mascara de uma string com o formato numerico
    Parametros necessarios :
    *   stFormatada =>  String com formato numerico,
    *   stUnMedida  =>  simbolo da unidade de medida
    *   charDecimal =>  Character separador decimal
    *   charMilhar  =>  Character separador de milhar
    sintaxe ==>> DesformataNumero(stNumero,stSimbolo,charDecimal,charMilhar);*/
function DesformataNumero(stFormatada,stUnMedida,charDecimal,charMilhar){
    var STRfinal;
    STRfinal = stFormatada.replace(stUnMedida,'');  // Retirando simbolo
    STRfinal = STRfinal.replace(charMilhar,'');     // Retirando Separador de Milhar
    STRfinal = STRfinal.replace(charDecimal,'.');   // Ajustar decimal
    return STRfinal;
}

/*  Esta função inverte o conteudo de uma string Ex: calixto => otxilac
    Parametros necessarios :
    *   STR     =>  String,
    sintaxe ==>> InverteString(STR)*/
function InverteString(STR){
    var STRfinal = "";
    var i = STR.length;
    while (i >= 0){ STRfinal += STR.charAt(i);  i--;}
    return STRfinal;
}

/*  Esta função procura um caracter em uma string e retorna a posicao da primeira ocorrencia
    Parametros necessarios :
    *   STR         =>  String para a busca,
    *   Character   =>  Character procurado,
    *   Inicio      =>  Inicio da procura ('direira' ou 'esquerda')
    sintaxe ==>> AchaCharacter(STR,Character,Inicio)*/
function AchaCharacter(STR,Character,Inicio){
    var posicao;
    if(Inicio == "direita"){posicao = InverteString(STR).indexOf(Character,0);}
    else{posicao = STR.indexOf(Character,0);}
    return posicao + 1 ;
}

/*  Esta função procura um caracter em uma string e retorna a posicao da primeira ocorrencia
    Parametros necessarios :
    *   STR         =>  String para a busca,
    *   Character   =>  Character procurado,
    *   Inicio      =>  Inicio da procura ('direira' ou 'esquerda')
    sintaxe ==>> AchaCharacteres(STR,Character,Inicio)*/
function AchaCharacteres(STR,Character,Inicio){
    var posicao;
    if(Inicio == "direita"){
        STR = InverteString(STR);
    }
    var tamanho = 0;
    for(var i=0; i< STR.length; i++){
        if(STR.charAt(i) == Character ){tamanho++;}
    }
    var arPosicoes = new Array(tamanho);
    var tamanho = 0;
    for(var i=0; i< STR.length; i++){
        if(STR.charAt(i) == Character ){
            arPosicoes[tamanho] = i;
            tamanho++;
        }
    }
    return arPosicoes;
}

/*  Esta função retira os caracteres diferentes de numeros da string passada
    Parametros necessarios :
    *   STR     =>  String com o numero,
    *   Tipo    =>  'decimal' para nao suprimir zeros a direita
    sintaxe ==>> LimpaNumero(STR,Tipo)*/
function LimpaNumero(STR,Tipo){
    var STRfinal = "";
    var i=0;
    if(STR == ""){return String(0);}
    while (i <= STR.length){
        if(STR.charAt(i)!= " " && !isNaN(STR.charAt(i))){STRfinal = STRfinal + STR.charAt(i);}
        i++;
    }
    if(Tipo == "Decimal"){return STRfinal;}
    if(STRfinal.length > 0){
        STRfinal = parseInt(STRfinal,10);
        STRfinal = String(STRfinal);
    }
    else{ STRfinal = String(0);
    }
    return STRfinal;
}
/*  Esta função separa em milhar o numero passado
    Parametros necessarios :
    *   STR         =>  String com o numero,
    *   charMilhar  =>  Character separador de milhar
    sintaxe ==>> SeparaEmMilhar(STR,charMilhar)*/
function SeparaEmMilhar(STR,charMilhar){
    var STRfinal = "";
    var i=1;
    STR = LimpaNumero(STR,"Inteiro");
    STR = InverteString(STR);
    while (i <= STR.length){
        STRfinal += STR.charAt(i-1);
        if(i%3 == 0){STRfinal += charMilhar}
        i++;
    }
    if(STRfinal != ""){
        STRfinal = InverteString(STRfinal);
        if(STRfinal.substr(0,1) == "."){STRfinal = (STRfinal.substr(1,STRfinal.length));};
        return STRfinal;
    }else{
        return String(0);
    }
}

/*  Esta função fixa o tamanho da parte decimal de um numero
    Parametros necessarios :
    *   STR             =>  String com a parte decimal do numero,
    *   nrCasasDecimais =>  Numero de casas decimais
    sintaxe ==>> FixaTamanho(STR,nrCasasDecimais)*/
function FixaTamanho(STR,nrCasasDecimais){
    STR = LimpaNumero(STR,"Decimal");
    var i = STR.length;
    if(i < nrCasasDecimais){
        while(nrCasasDecimais > i ){
            STR = STR + "0";
            i++;
        }
    }
    if(i > nrCasasDecimais){
        STR = STR.substr(0,STR.length - (STR.length - nrCasasDecimais));
    }
    return STR;
}
